function async1() {
    console.log('async1 start');
    Promise.resolve(async2()).then(() => {
      console.log('async1 end'); // 2
    })
  }
  
  function async2() {
    console.log('async2');
    Promise.resolve(async3()).then(() => {
      console.log('async2 end');
    })
  }
  
  async function async3() {
    await console.log('async3');
    console.log('async3 end'); // 1
  }
  
  console.log('start');
  
  async1();
  
  new Promise(function (resolve) {
    console.log('promise1');
    resolve();
  }).then(function () {
    console.log('promise2'); // 3
  });
  
  console.log('end');
// start    
// async1 start
// async2
// promise1
// end
// async1 end
// async2 end
// async3
// promise2
// async3 end
